package org.dromara.easyes.test.entity;

import lombok.Data;
import lombok.experimental.Accessors;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * Description:
 *
 * @Author: 86631561@163.com
 * Date: 2023/9/26 09:56
 * UpdateUser: 86631561@163.com
 * UpdateDate: 2023/9/26 09:56
 * UpdateRemark: The modified content
 * Version: 1.0.0
 * <p>
 * Copyright © 2023 86631561@163.com Technologies Inc. All Rights Reserved
 **/
@Data
@Accessors(chain = true)
@IndexName(value = "bus_order_detail", shardsNum = 3, replicasNum = 2, keepGlobalPrefix = true)
public class BusOrder {
    /** 订单基础信息相关 */
    @IndexId(type = IdType.CUSTOMIZE)
    private Long orderId;
    /**订单归属信息相关*/
    /**
     * 企业主键
     */
    private Long companyId;
    /**
     * 组织主键
     */
    private Long organization1Id;
    private Long organization2Id;
    private Long organization3Id;
    private Long organization4Id;
    private Long organization5Id;
    private Long organization6Id;
    private Long organization7Id;
    private Long organization8Id;
    private Long organization9Id;
    private Long organization10Id;
    /**
     * 商户主键
     */
    private Long merchantId;

    /**
     * 客户ID
     */
    private Long customerId;
    /**
     * 客户ID
     */
    private Long customerUserId;
    /**订单归属货柜信息相关*/
    /**
     * 设备主键
     */
    private Long machineId;
    /**
     * 货柜代码
     */
    @IndexField(fieldType = FieldType.KEYWORD_TEXT)
    private String machineCode;
    /**
     * 对应门 1-单门左门 2-右门
     */
    private Integer doorNum;
    /**
     * 主控id
     */
    private Long deviceId;
    /**
     * 订单场景
     */
    private Long sceneType;
    /**
     * 2.0事件ID
     */
    private Long eventId;
    /**
     * 业务追踪ID
     */
    @IndexField(fieldType = FieldType.KEYWORD_TEXT)
    private String traceId;
    /**
     * 创建类型 1-支付宝扫码 2-微信扫码 3-支付宝刷脸 4-微信刷脸 5-H5扫码
     */
    private Integer createType;
    /**
     * 支付分类 1-支付宝 2-微信 3-云闪付
     */
    private Integer ifType;
    /**
     * 1-创建 2-开门中 3-购物中 4-识别中 5-识别完成 9-关闭
     */
    private Integer status;
    /**
     * 1-创建 2-签约中 3-签约成功 4-支付中 5-支付成功 100-交易关闭 102-签约超时 103-签约失败 104-支付失败 105-部分支付
     */
    private Integer payStatus;
    /**
     * 1-创建 2-无退款 3-退款中 4-退款成功 5-退款失败 6-取消退款
     */
    private Integer refundStatus;
    /**
     * 1-创建中 2-识别正常 3-未开门 10-识别失败
     */
    private Integer recogCode;
    /**
     * 识别内容 0正常 1 未上架 2 非友好   000  【0[非友好] 0[未上架] 0[未购物]】
     */
    private Integer anomalyRecog;
    /**
     * 异常类型 1-无 2-识别异常 3-定价异常
     */
    private Integer anomalyType;
    /**
     * 调整状态 1-无 2-待处理 3-挂起 9-处理中 19-关闭
     */
    private Integer adjustStatus;
    /**
     * 客诉标志 1-无 2-待处理 3-挂起 9-处理中 19-关闭
     */
    private Integer complaintStatus;
    /**
     * 关闭类型 0-未关闭 1-识别正常关闭 2-未开门关闭 3-黑名单关闭 。。。)
     */
    private Integer closeType;
    /**
     * 在线商品合集
     */
    private String onlineSku;
    /**
     * 错误码
     */
    private String errorCode;
    /**
     * 错误信息
     */
    private String errorMsg;
    /**
     * 下发开门指令时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date openDoorTime;
    /**
     * 关门时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date closeDoorTime;
    /**
     * 识别时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date recogTime;
    /**
     * 收到识别结果时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date recogBackTime;
    /**
     * 支付时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date payTime;
    /**
     * 关闭时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date closeTime;
    /**
     * 总额
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal totalAmount;
    /**
     * 总优惠
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal discountAmount;
    /**
     * 自定义总补扣
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal customAdditionalAmount;
    /**
     * 自定义总退款
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal customRefundAmount;
    /**
     * 总退款
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal refundAmount;
    /**
     * 总退款失败
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal refundFailAmount;
    /**
     * 总计
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal amount;
    /**
     * 未支付金额（未收金额）
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal unpaidAmount;
    /**
     * 已支付金额（实收金额）
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal paidAmount;
    /**
     * 异常订单处理状态1-无 2-待处理 3-挂起 9-处理完成
     */
    private Integer anomalyStatus;
    private String remark;
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date createTime;

    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private Date updateTime;

    /** 创建者 */
    private String createBy;

    /** 更新者 */
    private String updateBy;
    /**
     * 实付金额
     */
    @IndexField(fieldType = FieldType.SCALED_FLOAT)
    private BigDecimal actualPaidAmount;
    @IndexField(fieldType = FieldType.NESTED, nestedClass = BusOrderItem.class)
    private List<BusOrderItem> busOrderItems;
    @IndexField(fieldType = FieldType.NESTED, nestedClass = BusOrderPay.class)
    private List<BusOrderPay> busOrderPays;
}
